//
//  UIView+Bezier.h
//  HSYCustomNavigationController
//
//  Created by key on 2017/2/10.
//  Copyright © 2017年 Scho.CustomNavigationController.Demo. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface UIView (Bezier)

#pragma mark - Shape

/**
 画矩形，允许是空心的

 @param rect        矩形的rect
 @param fillColor   矩形的填充色
 @param strokeColor 矩形的边框色
 @param lineWidth   矩形边框的宽度
 */
- (void)bezierForRectangleByRect:(CGRect)rect rectangleFillColor:(UIColor *)fillColor rectangleStrokeColor:(UIColor *)strokeColor rectangleLineWidth:(CGFloat)lineWidth;

/**
 画 “实心” 的矩形

 @param rect  矩形的rect
 @param color 矩形的颜色
 */
- (void)bezierForRectangleByRect:(CGRect)rect rectangleColor:(UIColor *)color;

/**
 画 “空心” 的矩形

 @param rect        矩形的rect
 @param strokeColor 矩形的边框色
 @param lineWidth   矩形边框的宽度
 */
- (void)bezierForRectangleByRect:(CGRect)rect rectangleStrokeColor:(UIColor *)strokeColor rectangleLineWidth:(CGFloat)lineWidth;

/**
 画圆角矩形，允许为空心或者自定义的圆角矩形

 @param rect        圆角矩形的rect
 @param radius      圆角矩形的圆角度数
 @param fillColor   圆角矩形的填充色
 @param strokeColor 圆角矩形的边框色
 @param lineWidth   圆角矩形的边框宽度
 */
- (void)bezierForRectangleByRoundedRect:(CGRect)rect cornerRadius:(CGFloat)radius rectangleFillColor:(UIColor *)fillColor rectangleStrokeColor:(UIColor *)strokeColor rectangleLineWidth:(CGFloat)lineWidth;

/**
 画 “空心” 的圆角矩形

 @param rect        圆角矩形的rect
 @param radius      圆角矩形的圆角度数
 @param strokeColor 圆角矩形的边框色
 @param lineWidth   圆角矩形的边框宽度
 */
- (void)bezierForRectangleByRoundedRect:(CGRect)rect cornerRadius:(CGFloat)radius rectangleStrokeColor:(UIColor *)strokeColor rectangleLineWidth:(CGFloat)lineWidth;

/**
 画 “实心” 的圆角矩形

 @param rect   圆角矩形的rect
 @param radius 圆角矩形的圆角度数
 @param color  圆角矩形的颜色
 */
- (void)bezierForRectangleByRoundedRect:(CGRect)rect cornerRadius:(CGFloat)radius rectangleColor:(UIColor *)color;

/**
 画任意角为圆角的不规则圆角矩形

 @param rect        不规则圆角矩形的rect
 @param corner      枚举，表示四个方向的角度，本参数为绘制确定不规则圆角矩形的圆角位置
 @param radii       不规则圆角矩形的圆角度数，为CGSize，其中widt表示外角，height表示内角
 @param fillColor   不规则圆角矩形的填充色
 @param strokeColor 不规则圆角矩形的边框色
 @param lineWidth   不规则圆角矩形的边框宽度
 */
- (void)bezierForRectangleByRoundedRect:(CGRect)rect roundingCorners:(UIRectCorner)corner cornerRadii:(CGSize)radii rectangleFillColor:(UIColor *)fillColor rectangleStrokeColor:(UIColor *)strokeColor rectangleLineWidth:(CGFloat)lineWidth;

/**
 画任意角为圆角的不规则圆角矩形，且改圆角的内角和外角的度数一致

 @param rect        不规则圆角矩形的rect
 @param corner      枚举，表示四个方向的角度，本参数为绘制确定不规则圆角矩形的圆角位置
 @param radius      不规则圆角矩形的圆角度数
 @param fillColor   不规则圆角矩形的填充色
 @param strokeColor 不规则圆角矩形的边框色
 @param lineWidth   不规则圆角矩形的边框宽度
 */
- (void)bezierForRectangleByRoundedRect:(CGRect)rect roundingCorners:(UIRectCorner)corner cornerRadius:(CGFloat)radius rectangleFillColor:(UIColor *)fillColor rectangleStrokeColor:(UIColor *)strokeColor rectangleLineWidth:(CGFloat)lineWidth;

/**
 画任意角为圆角的不规则圆角 “实心” 矩形，且改圆角的内角和外角的度数一致

 @param rect   不规则圆角矩形的rect
 @param corner 枚举，表示四个方向的角度，本参数为绘制确定不规则圆角矩形的圆角位置
 @param radius 不规则圆角矩形的圆角度数
 @param color  不规则圆角矩形的颜色
 */
- (void)bezierForRectangleByRoundedRect:(CGRect)rect roundingCorners:(UIRectCorner)corner cornerRadius:(CGFloat)radius rectangleColor:(UIColor *)color;

/**
 画任意角为圆角的不规则圆角 “空心” 矩形，且改圆角的内角和外角的度数一致

 @param rect        不规则圆角矩形的rect
 @param corner      枚举，表示四个方向的角度，本参数为绘制确定不规则圆角矩形的圆角位置
 @param radius      不规则圆角矩形的圆角度数
 @param strokeColor 不规则圆角矩形的边框色
 @param lineWidth   不规则圆角矩形的边框宽度
 */
- (void)bezierForRectangleByRoundedRect:(CGRect)rect roundingCorners:(UIRectCorner)corner cornerRadius:(CGFloat)radius rectangleStrokeColor:(UIColor *)strokeColor rectangleLineWidth:(CGFloat)lineWidth;

/**
 画圆形

 @param rect        圆形的rect
 @param fillColor   圆形的填充色
 @param strokeColor 圆形的边框色
 @param lineWidth   圆形的边框宽度
 */
- (void)bezierForOvalInRect:(CGRect)rect roundFillColor:(UIColor *)fillColor roundStrokeColor:(UIColor *)strokeColor roundLineWidth:(CGFloat)lineWidth;

/**
 画 “空心” 圆形

 @param rect        圆形的rect
 @param strokeColor 圆形的边框色
 @param lineWidth   圆形的边框宽度
 */
- (void)bezierForOvalInRect:(CGRect)rect roundStrokeColor:(UIColor *)strokeColor roundLineWidth:(CGFloat)lineWidth;

/**
 画 “实心” 圆形

 @param rect  圆形的rect
 @param color 圆形的颜色
 */
- (void)bezierForOvalInRect:(CGRect)rect roundColor:(UIColor *)color;

/**
 画椭圆，rect的width不能和height相等，否则会 “断言”

 @param rect        椭圆的rect
 @param fillColor   椭圆的填充色
 @param strokeColor 椭圆的边框色
 @param lineWidth   椭圆的边框宽度
 */
- (void)bezierForEllipseByRect:(CGRect)rect ellipseFillColor:(UIColor *)fillColor ellipseStrokeColor:(UIColor *)strokeColor ellipseLineWidth:(CGFloat)lineWidth;

/**
 画 “空心” 的椭圆

 @param rect        椭圆的rect
 @param strokeColor 椭圆的边框色
 @param lineWidth   椭圆的边框高度
 */
- (void)bezierForEllipseByRect:(CGRect)rect ellipseStrokeColor:(UIColor *)strokeColor ellipseLineWidth:(CGFloat)lineWidth;

/**
 画 “实心” 的椭圆

 @param rect  椭圆的rect
 @param color 椭圆的颜色
 */
- (void)bezierForEllipseByRect:(CGRect)rect ellipseColor:(UIColor *)color;

/**
 画圆弧

 @param center     圆心坐标
 @param radius     圆的半径
 @param startAngle 绘制起始点角度
 @param endAngle   绘制终点角度
 @param clockwise  是否顺时针绘制
 @param fillColor  圆弧的颜色
 @param lineWidth  圆弧的宽度
 */
- (void)bezierForArcCenter:(CGPoint)center arcRadius:(CGFloat)radius arcStartAngle:(CGFloat)startAngle arcEndAngle:(CGFloat)endAngle clockwise:(BOOL)clockwise arcFillColor:(UIColor *)fillColor arcLineWidth:(CGFloat)lineWidth;

/**
 画 “顺时针” 圆弧

 @param center     圆心坐标
 @param radius     圆的半径
 @param startAngle 绘制起始点角度
 @param endAngle   绘制终点角度
 @param fillColor  圆弧的颜色
 @param lineWidth  圆弧的宽度
 */
- (void)bezierClockwiseForArcCenter:(CGPoint)center arcRadius:(CGFloat)radius arcStartAngle:(CGFloat)startAngle arcEndAngle:(CGFloat)endAngle arcFillColor:(UIColor *)fillColor arcLineWidth:(CGFloat)lineWidth;

/**
 画 “逆时针” 圆弧

 @param center     圆心坐标
 @param radius     圆的半径
 @param startAngle 绘制起始点角度
 @param endAngle   绘制终点角度
 @param fillColor  圆弧的颜色
 @param lineWidth  圆弧的宽度
 */
- (void)bezierCounterClockwiseForArcCenter:(CGPoint)center arcRadius:(CGFloat)radius arcStartAngle:(CGFloat)startAngle arcEndAngle:(CGFloat)endAngle arcFillColor:(UIColor *)fillColor arcLineWidth:(CGFloat)lineWidth;

#pragma mark - Curves

/**
 画曲线, “单控制点” 曲线

 @param sPoint      起始坐标
 @param ePoint      终点坐标
 @param cPoint      曲线控制坐标
 @param strokeColor 曲线颜色
 @param lineWidth   曲线宽度
 */
- (void)bezierForCurvesByStartPoint:(CGPoint)sPoint endPoint:(CGPoint)ePoint controlPoint:(CGPoint)cPoint curvesStrokeColor:(UIColor *)strokeColor curvesLineWidth:(CGFloat)lineWidth;


/**
 画曲线, “双控制点” 曲线

 @param sPoint      起始坐标
 @param ePoint      终点坐标
 @param cPoint1     曲线控制坐标1
 @param cPoint2     曲线控制坐标2
 @param strokeColor 曲线颜色
 @param lineWidth   曲线宽度
 */
- (void)bezierForCurvesByStartPoint:(CGPoint)sPoint endPoint:(CGPoint)ePoint controlPoint1:(CGPoint)cPoint1 controlPoint2:(CGPoint)cPoint2 curvesStrokeColor:(UIColor *)strokeColor curvesLineWidth:(CGFloat)lineWidth;

/**
 画 “实心” 的三角形

 @param sPoint      三角形起始点，即top位置的点
 @param lPoint      左边的点
 @param rPoint      右边的点
 @param fillColor   三角形的颜色
 */
- (void)bezierForTriangleByStartPoint:(CGPoint)sPoint leftPoint:(CGPoint)lPoint rightPoint:(CGPoint)rPoint triangleFillColor:(UIColor *)fillColor;

/**
 画 “空心” 的三角形

 @param sPoint      三角形起始点，即top位置的点
 @param lPoint      左边的点
 @param rPoint      右边的点
 @param strokeColor 三角形边框色
 @param lineWidth   三角形边框宽度
 */
- (void)bezierForTriangleByStartPoint:(CGPoint)sPoint leftPoint:(CGPoint)lPoint rightPoint:(CGPoint)rPoint triangleStrokeColor:(UIColor *)strokeColor triangleLineWidth:(CGFloat)lineWidth;

/**
 画直线

 @param color 直线的颜色
 @param width 线条的线宽
 @param sPoint 线条起始位置
 @param ePoint 线条终点位置
 */
- (void)bezierForLineByColor:(UIColor *)color lineWidth:(CGFloat)width startPoint:(CGPoint)sPoint endPoint:(CGPoint)ePoint;

@end
